﻿using System;
using System.Data;
using AuctionSite.Entities;

namespace AuctionSite.BL
{
    public class LanceFacade
    {
        public const string FACADE_SESSION_NAME = "LanceFacade";

        public decimal MaiorValorDoProduto(decimal produtoId)
        {
            LanceService lanceService = new LanceService();
            DataTable dt = lanceService.BuscaMaiorValorDoProduto(produtoId);

            if (dt != null
                && dt.Rows.Count > 0
                && !string.IsNullOrEmpty(dt.Rows[0][0].ToString()))
                return decimal.Parse(dt.Rows[0][0].ToString());

            return -1;
        }

        public decimal MenorValorDoProduto(decimal produtoId)
        {
            LanceService lanceService = new LanceService();
            DataTable dt = lanceService.BuscaMenorValorDoProduto(produtoId);

            if (dt != null
                && dt.Rows.Count > 0
                && !string.IsNullOrEmpty(dt.Rows[0][0].ToString()))
                return decimal.Parse(dt.Rows[0][0].ToString());

            return -1;
        }

        public Lance NovoLance(
            string usuario,
            string produto,
            string valor
            )
        {
            #region Validação "Campos Em branco"

            if (string.IsNullOrWhiteSpace(usuario))
                throw new Exception("O Nome é obrigatório");

            if (string.IsNullOrWhiteSpace(produto))
                throw new Exception("O Produto é obrigatório");

            decimal valorParse;
            if (string.IsNullOrWhiteSpace(valor))
                throw new Exception("O Valor é obrigatório");

            #endregion

            if (decimal.TryParse(valor, out valorParse))
            {
                Lance lance = new Lance();
                lance.Data = DateTime.Now;
                lance.UsuarioId = int.Parse(usuario);
                lance.ProdutoId = int.Parse(produto);
                lance.Valor = valorParse;

                LanceService lanceService = new LanceService();
                return lanceService.Incluir(lance);
            }
            
            throw new Exception("O Valor inválido");
        }
    }
}